package com.ruoyi.advertisement.service;

import java.util.List;
import com.ruoyi.advertisement.domain.AdvertisementMaterial;
import org.springframework.web.multipart.MultipartFile;

/**
 * 广告素材Service接口
 * 
 * @author ruoyi
 * @date 2024-01-01
 */
public interface IAdvertisementMaterialService 
{
    /**
     * 查询广告素材
     * 
     * @param materialId 广告素材主键
     * @return 广告素材
     */
    public AdvertisementMaterial selectAdvertisementMaterialByMaterialId(Long materialId);

    /**
     * 查询广告素材列表
     * 
     * @param advertisementMaterial 广告素材
     * @return 广告素材集合
     */
    public List<AdvertisementMaterial> selectAdvertisementMaterialList(AdvertisementMaterial advertisementMaterial);

    /**
     * 新增广告素材
     * 
     * @param advertisementMaterial 广告素材
     * @return 结果
     */
    public int insertAdvertisementMaterial(AdvertisementMaterial advertisementMaterial);

    /**
     * 修改广告素材
     * 
     * @param advertisementMaterial 广告素材
     * @return 结果
     */
    public int updateAdvertisementMaterial(AdvertisementMaterial advertisementMaterial);

    /**
     * 批量删除广告素材
     * 
     * @param materialIds 需要删除的广告素材主键集合
     * @return 结果
     */
    public int deleteAdvertisementMaterialByMaterialIds(Long[] materialIds);

    /**
     * 删除广告素材信息
     * 
     * @param materialId 广告素材主键
     * @return 结果
     */
    public int deleteAdvertisementMaterialByMaterialId(Long materialId);

    /**
     * 上传广告素材文件
     * 
     * @param file 上传的文件
     * @param materialType 素材类型
     * @return 素材信息
     */
    public AdvertisementMaterial uploadMaterial(MultipartFile file, Integer materialType);

    /**
     * 根据素材类型查询素材列表
     * 
     * @param materialType 素材类型
     * @return 素材列表
     */
    public List<AdvertisementMaterial> selectMaterialsByType(Integer materialType);

    /**
     * 根据状态查询素材列表
     * 
     * @param status 状态
     * @return 素材列表
     */
    public List<AdvertisementMaterial> selectMaterialsByStatus(Integer status);

    /**
     * 更新素材播放次数
     * 
     * @param materialId 素材ID
     * @return 结果
     */
    public int incrementViewCount(Long materialId);

    /**
     * 批量查询素材信息
     * 
     * @param materialIds 素材ID列表
     * @return 素材列表
     */
    public List<AdvertisementMaterial> selectMaterialsByIds(List<Long> materialIds);

    /**
     * 获取素材统计信息
     * 
     * @return 统计信息
     */
    public MaterialStatistics getMaterialStatistics();

    /**
     * 素材统计信息类
     */
    public static class MaterialStatistics {
        private int totalMaterials;     // 总素材数
        private int imageMaterials;     // 图片素材数
        private int videoMaterials;     // 视频素材数
        private int enabledMaterials;   // 启用素材数
        private long totalViewCount;    // 总播放次数

        // getter和setter方法
        public int getTotalMaterials() {
            return totalMaterials;
        }

        public void setTotalMaterials(int totalMaterials) {
            this.totalMaterials = totalMaterials;
        }

        public int getImageMaterials() {
            return imageMaterials;
        }

        public void setImageMaterials(int imageMaterials) {
            this.imageMaterials = imageMaterials;
        }

        public int getVideoMaterials() {
            return videoMaterials;
        }

        public void setVideoMaterials(int videoMaterials) {
            this.videoMaterials = videoMaterials;
        }

        public int getEnabledMaterials() {
            return enabledMaterials;
        }

        public void setEnabledMaterials(int enabledMaterials) {
            this.enabledMaterials = enabledMaterials;
        }

        public long getTotalViewCount() {
            return totalViewCount;
        }

        public void setTotalViewCount(long totalViewCount) {
            this.totalViewCount = totalViewCount;
        }
    }
} 